package demo.qiujing.online.service;

import demo.qiujing.online.pojo.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by catt on 2018/12/7.
 */
@Service
@Slf4j
public class UserService {

    @Autowired
    private MongoTemplate mongoTemplate;

    public void save() throws Exception {
        User user = new User();
        user.setId(2018120701);
        user.setNickName("的川");
        user.setRealName("Qiu");
        log.info("mongodb通过save插入数据："+mongoTemplate.save(user));
    }

    public void insert(){
        User user = new User();
        user.setId(2018120702);
        user.setNickName("的川");
        user.setRealName("Qiu");
        //insert和save的区别：insert如果主键已经存在，则抛出异常；save主键存在，则覆盖
        User result = mongoTemplate.insert(user);
        log.info("mongodb通过insert插入数据："+result);
        user.setNickName("我是被修改后的Qiu");
        log.info("mongodb通过save保存数据："+mongoTemplate.save(user));
    }

    public void findById(){
        Integer id = 2018120701;
        Query query = new Query(Criteria.where("_id").is(id));
        User user =  mongoTemplate.findOne(query,User.class);
        log.info("mongodb通过Query根据id查询数据结果："+user);
        user = mongoTemplate.findById(id,User.class);
        log.info("mongodb通过findById根据id查询数据结果："+user);
    }

    public void find(){
        List<User> userList = mongoTemplate.findAll(User.class);
        log.info("mongodb通过findAll查询数据结果："+userList);
        Query query = new Query();
        log.info("mongodb通过Query查询数据结果："+mongoTemplate.find(query,User.class));
    }

    public void collectionExists(){
        log.info("mongodb判断是否存在：" + mongoTemplate.collectionExists(User.class));
    }

    public void updateById(){
        Integer id = 2018120707;
        //查询条件
        // Query query = new Query(Criteria.where("_id").is(id));
        Query query = new Query(Criteria.where("realName").is("Qiu"));
        //修改
        Update update = new Update();
        update.set("nickName","通过findAndModify修改");
        User user = mongoTemplate.findAndModify(query,update,User.class);
        /**
         * findAndModify执行步骤，先通过query条件查询到数据，
         * 如果没有数据，则返回null，
         * 如果有数据，则通过update对数据进行修改，再保存，保存成功，返回修改前的数据
         * 如果查询到的数据有多条，则只修改第一条
         */
        log.info("通过findAndModify修改数据："+user);
    }

    public void findAndRemove(){
        Integer id = 2018120703;
        //查询条件
        //Query query = new Query(Criteria.where("_id").is(id));
        Query query = new Query(Criteria.where("realName").is("Qiu"));
        /**
         * 先查数据，如果没有数据，返回null
         * 如果有数据，删除，返回被删除的数据
         * 如果数据有多条，则只删除第一条
         * 删除多条的使用 findAllAndRemove
         */
        User user = mongoTemplate.findAndRemove(query,User.class);
        log.info("mongodb通过findAndRemove删除数据："+user);
    }


    public void selectCount(){
        Query query = new Query();
        log.info("mongodb获取条数：" + mongoTemplate.count(query,User.class) );
    }



}
